/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package szerelomuhelynyilvantartas;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 *
 * @author csatari
 */
public class Főmenü extends JFrame {
    final static DefaultListModel l = new DefaultListModel();
    final static JList list = new JList(l);
    Munkalap kiválasztottMunkalap;
    int kiválasztottMunkalapIndex;
    JButton hozzáad;
    JButton keres;
    static JButton megtekintés;
    static JButton törlés;
    static JLabel tulaj;
    static JLabel tulajCím;
    static JLabel tulajTelefon;
    static JLabel felvételIdőpont;
    static JLabel munkaFelvevő;
    static JLabel autóGyártmány;
    static JLabel autóRendszám;
    static JLabel kifizetve;
    Szerelő belépettSzerelő;
    
    public Főmenü(Szerelő belépettSzerelő) {
        this.belépettSzerelő = belépettSzerelő;
        int i = 1;
        for(Munkalap munkalap : SzereloMuhelyNyilvantartas.munkalapok) {
            l.addElement(i+". munkalap: "+munkalap.getTulajdonos().getNév()+", "+munkalap.getAutó().getGyártmány()+" "
                    +munkalap.getAutó().getTípus());
            i++;
        }
        setTitle("Szerelőműhely nyilvántartó");
        setSize(new Dimension(700, 500));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        
        JPanel outerPanel = new JPanel();
        outerPanel.setLayout(new BorderLayout(10,0));
        
        list.addListSelectionListener(new ListListener());
        
                
        JScrollPane listPane = new JScrollPane(list);
        listPane.setPreferredSize(new Dimension(300,200));
        hozzáad = new JButton("Munkalap létrehozása");
        hozzáad.addActionListener(new HozzáadListener());
        
        
        outerPanel.add(listPane, BorderLayout.LINE_START);
        outerPanel.add(hozzáad,BorderLayout.PAGE_END);
        
        JPanel centerPanel = new JPanel();
        centerPanel.setLayout(new BoxLayout(centerPanel,BoxLayout.Y_AXIS));
        centerPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
        
        tulaj = new JLabel();
        tulajCím = new JLabel();
        tulajTelefon = new JLabel();
        felvételIdőpont = new JLabel();
        munkaFelvevő = new JLabel();
        autóGyártmány = new JLabel();
        autóRendszám = new JLabel();
        kifizetve = new JLabel();
        megtekintés = new JButton("Munkalap megtekintése");
        megtekintés.setVisible(false);
        megtekintés.addActionListener(new MegtekintListener());
        törlés = new JButton("Munkalap törlése");
        törlés.setMaximumSize(new Dimension(170,25));
        törlés.addActionListener(new TörölListener());
        törlés.setVisible(false);
        
        centerPanel.add(tulaj);
        centerPanel.add(tulajCím);
        centerPanel.add(tulajTelefon);
        centerPanel.add(felvételIdőpont);
        centerPanel.add(munkaFelvevő);
        centerPanel.add(autóGyártmány);
        centerPanel.add(autóRendszám);
        centerPanel.add(kifizetve);
        centerPanel.add(megtekintés);
        centerPanel.add(törlés);
        
        centerPanel.setPreferredSize(new Dimension(280,200));
        
        JPanel rightPanel = new JPanel();
        keres = new JButton("Munkalap keresése");
        keres.addActionListener(new KeresListener());
        rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
        rightPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
        rightPanel.add(new JLabel("Szerelő: "+belépettSzerelő.getNév()+"  "));
        rightPanel.add(keres);
        
        
        
        outerPanel.add(centerPanel, BorderLayout.CENTER);
        outerPanel.add(rightPanel, BorderLayout.LINE_END);
        
        add(outerPanel);
        list.setSelectedIndex(0);
        addWindowListener( new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                Mentés.mentés();
            }
        });
    }
    public static void refreshFőmenü(int selected) {
        l.clear();
        int i = 1;
        for(Munkalap munkalap : SzereloMuhelyNyilvantartas.munkalapok) {
            l.addElement(i+". munkalap: "+munkalap.getTulajdonos().getNév()+", "+munkalap.getAutó().getGyártmány()+" "
                    +munkalap.getAutó().getTípus());
            i++;
        }
        if(selected != -1) {
            list.setSelectedIndex(selected);
        }
        if(SzereloMuhelyNyilvantartas.munkalapok.isEmpty()) {
            tulaj.setText("");
            tulajCím.setText("");
            tulajTelefon.setText("");
            felvételIdőpont.setText("");
            munkaFelvevő.setText("");
            autóGyártmány.setText("");
            autóRendszám.setText("");
            kifizetve.setText("");
            megtekintés.setVisible(false);
            törlés.setVisible(false);
        }
    }
    public static void keresés(String szerelőNév, String tulajNév,int év, int hónap, int nap) {
        int i=0;
        for(Munkalap munkalap : SzereloMuhelyNyilvantartas.munkalapok) {
            if((munkalap.getMunkaFelvevő().getNév().equals(szerelőNév) || szerelőNév.isEmpty()) &&
                   (munkalap.getTulajdonos().getNév().equals(tulajNév) || tulajNév.isEmpty()) &&
                   (munkalap.getFelvételIdőpont().get(Calendar.YEAR) == év || év == 0) &&
                   (munkalap.getFelvételIdőpont().get(Calendar.MONTH) == hónap || hónap == 0) &&
                   (munkalap.getFelvételIdőpont().get(Calendar.DAY_OF_MONTH) == nap || nap == 0)) {
                MunkalapMenü munkalapMenü = new MunkalapMenü(munkalap,i);
                munkalapMenü.setVisible(true);
            }
            i++;
        }
    }
    private class ListListener implements ListSelectionListener {

        @Override
        public void valueChanged(ListSelectionEvent e) {
            if(list.getSelectedIndex() == -1) {
                tulaj.setText("");
            }
            else {
                Munkalap munkalap = SzereloMuhelyNyilvantartas.munkalapok.get(list.getSelectedIndex());
                kiválasztottMunkalap = munkalap;
                kiválasztottMunkalapIndex = list.getSelectedIndex();
                Calendar felvétel = munkalap.getFelvételIdőpont();
                
                tulaj.setText("Tulaj: "+munkalap.getTulajdonos().getNév());
                tulajCím.setText("Cím: "+munkalap.getTulajdonos().getCím());
                tulajTelefon.setText("Telefonszám: "+munkalap.getTulajdonos().getTelefonszám());
                felvételIdőpont.setText("Felvétel időpontja: "+felvétel.get(Calendar.YEAR) + ". " + 
                    (felvétel.get(Calendar.MONTH)+1) + ". " + felvétel.get(Calendar.DAY_OF_MONTH) + ". ");
                
                munkaFelvevő.setText("Szerelő: "+munkalap.getMunkaFelvevő().getNév());
                
                autóGyártmány.setText("Autó gyártmány: "+munkalap.getAutó().getGyártmány()+" "+munkalap.getAutó().getTípus());
                autóRendszám.setText("Rendszám: "+munkalap.getAutó().getRendszám());
                if(munkalap.isKifizetve()) {
                    kifizetve.setText("Kifizetve: igen");
                }
                else {
                    kifizetve.setText("Kifizetve: nem");
                }
                megtekintés.setVisible(true);
                törlés.setVisible(true);
            }
        }
    }
    private class HozzáadListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            MunkalapMenü munkalapMenü = new MunkalapMenü();
            munkalapMenü.setVisible(true);
        }
    }
    private class MegtekintListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            MunkalapMenü munkalapMenü = new MunkalapMenü(kiválasztottMunkalap,kiválasztottMunkalapIndex);
            munkalapMenü.setVisible(true);
        }
        
    }
    private class TörölListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(kiválasztottMunkalap.isKifizetve()) {
                SzereloMuhelyNyilvantartas.munkalapok.remove(kiválasztottMunkalapIndex);
                Főmenü.refreshFőmenü(0);
            }
            else {
                JOptionPane.showMessageDialog(rootPane, "A munkalap nem törölhető, mert nem lett kifizetve!");
            }
        }
    }
    private class KeresListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            final JTextField szerelőNeve = new JTextField(20);
            final JTextField tulajNeve = new JTextField(20);
            JButton keresésButton = new JButton("Keres");
            
            int év = Calendar.getInstance().get(Calendar.YEAR);
            final JTextField évText = new JTextField(Integer.toString(Calendar.getInstance().get(Calendar.YEAR)),4);
            final JTextField hónapText = new JTextField(Integer.toString(Calendar.getInstance().get(Calendar.MONTH)+1),2);
            final JTextField napText= new JTextField(Integer.toString(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)),2);
            
            final JFrame frame = new JFrame("Keresés");
            frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            frame.setSize(new Dimension(400, 140));
            frame.setLocationRelativeTo(null);
            JPanel keresPanel = new JPanel();
            GridLayout gl = new GridLayout(0,4);
            gl.setVgap(5);
            keresPanel.setLayout(gl);
            
            keresPanel.add(new JLabel("Szerelő neve:"));
            keresPanel.add(szerelőNeve);
            keresPanel.add(new JLabel(" "));
            keresPanel.add(new JLabel(" "));
            keresPanel.add(new JLabel("Dátum:"));
            keresPanel.add(évText);
            keresPanel.add(hónapText);
            keresPanel.add(napText);
            keresPanel.add(new JLabel("Tulaj neve:"));
            keresPanel.add(tulajNeve);
            keresPanel.add(new JLabel());
            keresPanel.add(new JLabel());
            keresPanel.add(keresésButton);
            frame.add(keresPanel);
            frame.setVisible(true);
            
            keresésButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    int év, hónap, nap;
                    try {
                        év = Integer.parseInt(évText.getText());
                    } catch (NumberFormatException ex) {
                        év = 0;
                    }
                    try {
                        hónap = Integer.parseInt(hónapText.getText())-1;
                    } catch (NumberFormatException ex) {
                        hónap = 0;
                    }
                    try {
                        nap =Integer.parseInt(napText.getText());
                    } catch (NumberFormatException ex) {
                        nap = 0;
                    } 
                    Főmenü.keresés(szerelőNeve.getText(),tulajNeve.getText(),
                            év,hónap,nap);
                    frame.dispose();
                }
                
            });
            
        }
    }
}
